#include <iostream>

using std::cout;
using std::endl;

int func1()
{
    cout << "int func1()" << endl;
    return 10;
}

int func2()
{
    cout << "int func2()" << endl;
    return 20;
}

int add(int x, int y)
{
    cout <<"int add(int, int) " << endl;
    return x + y;
}

void test()
{
    func1();//调用func1
    //要定义函数指针，并且让其指向返回类型是int，参数列表是空
    /* int*  pFunc1();//指针函数 */
    /* typedef int A; */
    /* typedef int(*)()  pFunc2;//error */
    //1、定义函数指针类型
    typedef int(*pFunc)();//函数指针(C语言中的写法)
    using pFunc3 = int(*)();//函数指针(C++中的写法)

    //2、回调函数可以使用函数指针进行调用
    //回调函数的使用步骤：注册回调函数 + 执行回调函数
    //3、思想：回调函数可以被延迟调用，但是需要借助函数指针
    pFunc f = func1;//注册回调函数
    //....
    cout << "===================" << endl;
    cout << "f() = " << f() << endl;//执行回调函数

    f = &func2;
    cout << "f() = " << f() << endl;

    /* f = add;//error */
}

int main(int argc, char *argv[])
{
    test();
    return 0;
}

